#define _CRT_SECURE_NO_WARNINGS

#include"RBTree.h"

void RBTest1()
{
	RBTree<int, int> rb;
	rb.Insert({ 30,30 });
	rb.Insert({ 20,20 });
	rb.Insert({ 40,40 });
	rb.Insert({ 10,10 });
	rb.Insert({ 25,25 });
	rb.Insert({ 35,35 });
	rb.Insert({ 50,50 });
	rb.Insert({ 5,5 });
	rb.Insert({ 15,15 });
	rb.Insert({ 28,28 });
	rb.Insert({ 38,38 });
	rb.Insert({ 45,45 });
	rb.Insert({ 48,48 });
	cout << rb.IsBalance() << endl;

	rb.InOrder();

}

void RBTest2()
{
	RBTree<int, int> rb;
	rb.Insert({ 3,3 });
	rb.Insert({ 2,2 });
	rb.Insert({ 1,1 });
	cout << rb.IsBalance() << endl;


	rb.InOrder();
}

void RBTest3()
{
	RBTree<int, int> rb;
	rb.Insert({ 30,30 });
	rb.Insert({ 20,20 });
	rb.Insert({ 40,40 });
	rb.Insert({ 35,35 });
	rb.Insert({ 25,25 });
	rb.Insert({ 27,27 });
	rb.Insert({ 10,10 });
	rb.Insert({ 5,5 });
	rb.Insert({ 15,15 });
	rb.Insert({ 3,3 });

	cout << rb.IsBalance() << endl;
	rb.InOrder();

}

void RBTest4()
{
	RBTree<int, int> rb;
	rb.Insert({ 9,9 });
	rb.Insert({ 5,5 });
	rb.Insert({ 15,15 });
	rb.Insert({ 13,13 });
	rb.Insert({ 17,17 });
	rb.Insert({ 18,18 });
	rb.Insert({ 14,14 });
	rb.Insert({ 12,12 });
	rb.Insert({ 11,11 });
	rb.Insert({ 10,10 });

	cout << rb.IsBalance() << endl;
	rb.InOrder();
}
int main()
{
	RBTest1();
	RBTest2();
	RBTest3();
	RBTest4();
	return 0;
}




//class Solution {
//public:
//    int totalFruit(vector<int>& f) {
//        int n = f.size();
//        int hash[100001] = { 0 };
//        int kinds = 0;
//        int ans = 0;
//        for (int left = 0, right = 0; right < n; ++right)
//        {
//            if (hash[f[right]] == 0)
//                kinds++;
//            hash[f[right]]++;
//            while (kinds > 2)
//            {
//                hash[f[left]]--;
//                if (hash[f[left]] == 0)
//                    kinds--;
//                left++;
//            }
//            ans = max(ans, right - left + 1);
//        }
//        return ans;
//    }
//};